<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="Ipq8a" id="Ipq8a"><span data-lake-id="u46415c5a" id="u46415c5a" style="color: rgb(18, 18, 18)">典型回答</span></h1>
  <p data-lake-id="u5b3c10bd" id="u5b3c10bd"><span data-lake-id="u9d70ec78" id="u9d70ec78">Hibernate和Mybatis都是ORM框架，都支持JDBC和JTA事务处理，它们创建的目的都是为了简化Java原生程序操作数据库的步骤。增加开发者的开发效率。</span></p>
  <p data-lake-id="ue7adb7a7" id="ue7adb7a7"><span data-lake-id="u62b0d888" id="u62b0d888">​</span><br></p>
  <p data-lake-id="u5dd84686" id="u5dd84686"><span data-lake-id="u5b730514" id="u5b730514">不同点有以下几点：</span></p>
  <ol list="u3df55840">
   <li fid="ue3a54cec" data-lake-id="u37e6e3ee" id="u37e6e3ee"><strong><span data-lake-id="uf9c62768" id="uf9c62768">Hibernate是全自动的，Mybatis是半自动的。</span></strong><span data-lake-id="u765d455e" id="u765d455e">在Hibernate当中，开发者只需要定义好数据库的表字段和Java DO的映射关系和规则即可，Hibernate会开放出来接口自动去处理数据库表的CURD，并按照规定好的规则映射到DO对象中，这个过程中操作者是完全不需要感知Sql逻辑的。但是在Mybatis中则完全不是这样，Mybatis不会帮助开发者编写sql逻辑，Mybatis只会按照定义好的规则将数据库字段映射到Java的DO中，但是具体的sql逻辑还是需要开发者自己编写的。</span></li>
  </ol>
  <p data-lake-id="u4e645ad6" id="u4e645ad6"><br></p>
  <ol list="u3df55840" start="2">
   <li fid="ue3a54cec" data-lake-id="u3491e6fb" id="u3491e6fb"><span data-lake-id="ucfb3b75a" id="ucfb3b75a">正是因为Mybatis需要自己编写Sql逻辑，这是一个包袱，因为开发者需要根据不同的DB，选择不同的SQL语句（DB移植性不高），而且正是因为要自己写SQL，项目初期的开发工作量要比Hibernate大一点。但是这也是优点，</span><strong><span data-lake-id="u6e8137f5" id="u6e8137f5">通过Mybatis开发者就可以定制sql</span></strong><span data-lake-id="u333938fb" id="u333938fb">，譬如多表join，sql优化等操作是Hibernate不具备的</span></li>
  </ol>
  <p data-lake-id="u6d191d45" id="u6d191d45"><br></p>
  <ol list="u3df55840" start="3">
   <li fid="ue3a54cec" data-lake-id="u2f981ea1" id="u2f981ea1"><span data-lake-id="u761fdd1f" id="u761fdd1f">Hibernate的缓存系统要优于Mybatis，如果二级缓存出现脏数据，Hibernate会及时报错，但是Mybatis就需要开发者自己去感知</span></li>
  </ol>
  <p data-lake-id="u65415a89" id="u65415a89"><br></p>
  <p data-lake-id="u613c29b7" id="u613c29b7"><span data-lake-id="u41404f26" id="u41404f26">总的来说，MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架，Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。</span></p>
  <p data-lake-id="ubc0b5178" id="ubc0b5178"><span data-lake-id="u28e3b7a0" id="u28e3b7a0">​</span><br></p>
  <p data-lake-id="ubf8a7ac1" id="ubf8a7ac1"><span data-lake-id="u984ce07c" id="u984ce07c">对于性能要求不太苛刻的系统，比如管理系统、ERP 等推荐使用 Hibernate，而对于性能要求高、响应快、灵活的系统则推荐使用 MyBatis。</span></p>
 </body>
</html>